package com.imm.reportes;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.imm.persistencia.DBConn;



public class ImpReportes {
	
	private ImpReportes(){};
	
	private static ImpReportes instancia = new ImpReportes();
	
	public static ImpReportes getInstance(){
		return instancia;
	}

	public Map<Long, Map<Integer, String>> ventaTotal(Date fechaInicio, Date fechaFin) throws SQLException	{
		
		Map <Long,Map <Integer, String>> listVenta = new HashMap<Long,Map <Integer, String>>();
		Map<Integer, String> titulo = new HashMap<Integer, String>();
		
		
		String sql_ventaTotal="SELECT " +
						"Agencias.Id, " +
						"Agencias.Nombre, " +
						"DATE_FORMAT(Ventas.FechaVenta, '%Y-%m') AS mes, " +
						"SUM(Ventas.Importe) AS Importe " +
						"FROM " +
						"Ventas " +
						"JOIN	Agencias ON Agencias.Id = Ventas.Id_Agencia " +
						"LEFT JOIN Anulaciones ON Anulaciones.Id_Ticket = Ventas.Id_Ticket " +
						"WHERE Anulaciones.Id_Ticket  IS NULL " +
						"AND Ventas.FechaVenta >= DATE(DATE_FORMAT(?, '%Y%m01')) " +
						"AND Ventas.FechaVenta < DATE(DATE_FORMAT(DATE_ADD(?, INTERVAL 1 MONTH), '%Y%m01')) " + 
						"GROUP BY " +
						"Agencias.Id, " +
						"Agencias.Nombre, " +
						"DATE_FORMAT(Ventas.FechaVenta, '%Y-%m') " +
						"ORDER BY " +
						"DATE_FORMAT(Ventas.FechaVenta, '%Y-%m'), " +
						"Agencias.Nombre";
					

		titulo.put(0, "Id");
		titulo.put(1, "Nombre");
		titulo.put(2, "Mes");
		titulo.put(3, "Importe");
		
		listVenta.put((long) 0, titulo);		
		Long idVenta = (long) 1;
		
		PreparedStatement ps_ventaTotal = null;

		Connection con = null;
		ResultSet rs_ventaTotal = null;
		
		con = DBConn.DataSourceCon();
		con.setAutoCommit(false);
		
		ps_ventaTotal = con.prepareStatement(sql_ventaTotal);

		ps_ventaTotal.setTimestamp(1, new Timestamp(fechaInicio.getTime()));
		ps_ventaTotal.setTimestamp(2, new Timestamp(fechaFin.getTime()));
		
		rs_ventaTotal = ps_ventaTotal.executeQuery();
		
		while(rs_ventaTotal.next()) {
			Map<Integer, String> resultado = new HashMap<Integer, String>();
			
			resultado.put(0, rs_ventaTotal.getString("Id"));
			resultado.put(1, rs_ventaTotal.getString("Nombre"));
			resultado.put(2, rs_ventaTotal.getString("Mes"));
			resultado.put(3, rs_ventaTotal.getString("Importe"));
				
			listVenta.put(idVenta, resultado);
			
			idVenta += 1;
		}
		
		ps_ventaTotal.close();
		rs_ventaTotal.close();
		if(con != null) con.close();
		
		return listVenta;
	}
	
	
}
